<?php
/**
 * Controller_Ajax_Question
 *
 * Класс Controller_Ajax_Question отвечает за обработку запросов связанных с модулем "ответ-вопрос"
 */
class Controller_Ajax_Question extends Controller_Ajax {

	/**
	 * (non-PHPdoc)
	 *
	 */
	public function actionSwitch() {
	  Service_Debug::setDebug();
		switch ($this->arrRequest[2]) {
			case 'comment':
				$this->actionAdd();
				break;
			case 'best-answer':
				$this->markTheBestAnswer();
				break;
			default: $this->setError(404);
 		}
	}

	/**
	 * Добавление комментария
	 *
	 */
	public function actionAdd () {
		Service_Debug::setDebug();
		$objSession = User_Session::instance();
		
		$commentText = isset($_POST['text']) ? Service_Escape::absolutelyEscapeString($_POST['text']) : '';
		$idAuthor = isset($_POST['ID_user']) ? Service_Escape::absolutelyEscapeString($_POST['ID_user']) : '';
		$idAnswer = isset($_POST['ID_answer']) ? Service_Escape::absolutelyEscapeString($_POST['ID_answer']) : '';
		
		if (!$objSession->isLoggedIn() ||  empty($commentText) || empty($idAuthor) || empty($idAnswer)) return $this->makeStandardError('Ошибка');
		
		$objQuestionComment = new QuestionComment();
		$objQuestionComment->setField('text', $commentText);
		$objQuestionComment->setField('ID_user', $idAuthor);
		$objQuestionComment->setField('ID_answer', $idAnswer);
		if($objQuestionComment->save()) {
			$objUser = new User_User($idAuthor);
			$profileLink = '<a class="user-blue-link" href="' . W_ABSPATH . 'profile">' . $objUser->getField('first_name') . ' ' . $objUser->getField('last_name') . '</a> ';
			$newCommentBlock = '<div class="comment-block">
									<div class="comment-info info">
										<ul>
											<li>' . $profileLink . '</li>
											<li>' . Service_Date::changeDateFormat($objQuestionComment->getField('created_at'),'Y-m-d H-i-s', 'j R Y в H:i') . '</li>
										</ul>
									</div>
									<div class="comment-text">' . $commentText .'</div>
								</div>';
			$objQuestionComment->setField('commentBlockText',$newCommentBlock);
			$this->arrReturn = array('result' => 'OK', 'data' => $objQuestionComment->tableFields);
		}
	}
	
	/**
	 * Отметка лучшего ответа
	 *
	 */
	public function markTheBestAnswer () {
		Service_Debug::setDebug();
		$answerId = isset($_POST['ID_answer']) ? Service_Escape::absolutelyEscapeString($_POST['ID_answer']) : '';
		$objAnswer = new Answer();
		
		// Получаем id автора вопроса, ответ который нужно отметить как лучший, и id самого вопроса
		$questionInfo = $objAnswer->find('first', array('select' => '`question`.`ID_user`,`question`.`ID_question`', 'joins' => 'INNER JOIN `question` USING (`ID_question`)', 'conditions' => "`answer`.`ID_answer`='" . $answerId . "'"));
		// Если текущий пользователь выберает лучший ответ для вопроса, принадлежащего не ему или передан айди несуществующего ответа
		if (isset($questionInfo) && !SimpleAdministration::isAuthorOrAdmin($questionInfo['ID_user'])) return $this->makeStandardError('Ошибка');
		$objAnswer->id = $answerId;
		$objAnswer->setField('ID_quesion', $questionInfo['ID_question']);
		$objAnswer->makeBestAnswer();
		$this->arrReturn = array('result' => 'OK');
	}
}
?>